home *** CD-ROM | disk | FTP | other *** search
/ Ian & Stuart's Australian Mac 1993 September / clonecd / September 93.img / Archives / Applications / Graphics / Fractals / Mandelzot 3.0.7 / MandelZot file format < prev    next >
Text File  |  1991-11-01  |  9KB  |  301 lines

  1. MandelZot data files (whether coordinate, bitmap, dwell, compressed dwell,
  2. or colorset) consist of a sequence of variable-sized blocks.  Each block
  3. starts with a fixed-size header containing a save-file signature type
  4. ('ManD'), a block code number, a block version number, and the byte count
  5. for the block data itself.
  6.  
  7. When it has proven necessary to add new fields to a block (adding information),
  8. the block version number is incremented, and the new fields are added to the
  9. end of the block.  Fields are _never_ removed from a block, nor is the
  10. arrangement of fields within a block ever altered.
  11.  
  12. When writing a save-file, each version of MandelZot will write the most
  13. up-to-date version of each block that it is aware of.  When reading a
  14. save-file from disk, each version of MandelZot will read in as much of
  15. the block as it knows how to parse (based on the most up-to-date version
  16. it understands) and will skip the rest.  If a data block is of an older
  17. version, and is shorter than the version that MandelZot expects, MandelZot
  18. will read in the available data, and provide reasonable default values for
  19. any fields not available in the shorter block.
  20.  
  21. Data is written in 68000 (big-endian) format.  Floating point numbers are
  22. usually represented in "short double" (IEEE double-precision, 8-byte)
  23. format.  In a few cases, values are represented in SANE extended-precision
  24. (12-byte) format.
  25.  
  26. A minimal dwell-save file, being created by an external application, would
  27. consist of:
  28.  
  29. -  A CoordBlock, version 0.  This would identify the portion of the complex
  30.    plane under examination.
  31.    
  32. -  A ModeBlock, version 0.  This would identify the basic characterisics of
  33.    the algorithms used to calculate the data.  [You might be able to omit this
  34.    block... I haven't tried.]
  35.  
  36. -  A word-map block, version 1.  This would contain the dwell values, as an
  37.    array of 16-bit integers (top row first).  Each dwell is represented as a
  38.    15-bit value (the high-order bit may be set to indicate "uncertain,
  39.    recalculate this pixel").  A value of 32767 means "unknown", a value of
  40.    32766 means "in the M-set".
  41.    
  42. -  An EOF block (header only, no data).
  43.  
  44. The file's type should be set to 'ManD', with a creator code of 'dcpM' (or
  45. 'dcpF' to designate ownership by FractalMagic Mac instead of MandelZot).
  46.  
  47. The resource fork is not used.
  48.  
  49.  
  50. ---------------------------------------------------
  51.  
  52.  
  53. /* File types/owners, and so forth */
  54.  
  55. #define mySignature 'dcpM'
  56. #define saveFileType 'ManD'
  57. #define gifFileType 'GIFf'
  58. #define tiffFileType 'TIFF'
  59. #define pictFileType 'PICT'
  60. #define colorSetFileType 'ManC'
  61.  
  62. typedef unsigned int Iter, *IterPtr, **IterHandle;
  63.  
  64. /*    Masks and values for Iter data type, version 0 */
  65.         
  66. #define v0unknown                0x8000
  67. #define v0scaled                0x4000
  68. #define v0notCalced            0xC000
  69. #define v0inTheSet            0x1000
  70. #define v0countMask            0x0FFF
  71. #define v0placeMask            0x1FFF
  72. #define v0maxLegalDwell    0x0FFF
  73.  
  74. /*    Masks and values for Iter data type, version 1 */
  75.         
  76. #define scaled                0x8000
  77. #define placeMask            0x7FFF
  78. #define unknown                0x7FFF
  79. #define inTheSet            0x7FFE
  80. #define maxLegalDwell    0x7FFD
  81.  
  82. typedef int boolean;
  83.  
  84. typedef struct Range{
  85.     double    top;
  86.     double    left;
  87.     double    bottom;
  88.     double    right;
  89. } Range;
  90.  
  91. typedef struct {
  92.     double    x;
  93.     double    y;
  94. } Complex, *ComplexPtr, **ComplexHandle;
  95.  
  96. typedef struct {long int word1, word2, word3;} ieeeExtended;
  97. typedef struct {int oneWord [5];} saneExtended;
  98.  
  99. typedef struct { unsigned int high, low; } fakelong;
  100.     
  101. typedef unsigned int DwellMap, *DwellMapPtr, **DwellMapHandle;
  102.  
  103. typedef enum { restartCalcs, runCalcs, noMoreCalcs, continueCalcs } CalcPhase;
  104.  
  105. typedef enum { eofHeader = 0,
  106.                              coordHeader = 1,
  107.                modeHeader = 2,
  108.                colorSetHeader = 3,
  109.                bitMapHeader = 4,
  110.                byteMapHeader = 5,
  111.                wordMapHeader = 6,
  112.                printRecordHeader = 7,
  113.                codeNameHeader = 8,
  114.                privateDataHeader = 9,
  115.                otherPrivateDataHeader = 10,
  116.                descriptiveStringHeader = 11,
  117.                compressedWordMapHeader = 12} FileHeaderType;
  118.  
  119. typedef enum { coordFile = 1,
  120.                              bitMapFile,
  121.                              dwellFile,
  122.                              compressedDwellFile,
  123.                              colorSetFile,
  124.                              PICTFile,
  125.                              TIFF8File,
  126.                              TIFF24File } FileTypeID;
  127.  
  128. typedef enum {  bandWidth = 1,
  129.                                 hideWhenSuspended = 3,
  130.                                 monochrome = 5,
  131.                                 patternedPen,
  132.                                 colorPen,
  133.                                 colorQD,
  134.                                 contrastCLUT = 10,
  135.                                 smoothCLUT,
  136.                                 customCLUT,
  137.                                 loadCLUT,
  138.                                 useAnimation    =    15,
  139.                                 rotateIn = 17,
  140.                                 rotateOut,
  141.                                 redrawWindow = 20} DisplayMode;
  142.  
  143. typedef enum { randomOrder = 1,
  144.                              rasterOrder,
  145.                              lineOrder} CalcOrder;
  146.  
  147. typedef enum { chipMode = 1,
  148.                              saneMode,
  149.                              fixedPointMode,
  150.                              integerMode } CalcMode;
  151.                              
  152.                                         
  153. typedef enum { settingsOk = 1,
  154.                              settingsCancel,
  155.                              saveCoordsOnly,
  156.                              saveBitMap,
  157.                              saveDwells,
  158.                              savePICT,
  159.                              saveTIFF8,
  160.                              saveTIFF24,
  161.                              saveColorSet,
  162.                              saveCompressedDwells } SaveFileMode;
  163.  
  164. typedef enum { smooth,
  165.                              contrast,
  166.                              custom } CLUTmode;    
  167.  
  168. typedef enum { Mariani_Silver,
  169.                              successive_refinement,
  170.                              modified_Mariani_Silver,
  171.                              contour_crawl } DivConAlgorithm;
  172.  
  173. typedef enum { monoColor,
  174.                              RGBblend,
  175.                              HSVblend } PatchType;
  176.  
  177. typedef struct Patch {
  178.     int                        patchSize;
  179.     PatchType            patchType;
  180.     RGBColor            color[];
  181. } Patch, *PatchPtr, **PatchHandle;
  182.  
  183. typedef struct Swatch {
  184.     int                        bandsCovered;
  185.     int                        swatchSize;
  186.     int                        patchCount;
  187.     Patch                    patch[];
  188. } Swatch, *SwatchPtr, **SwatchHandle;
  189.     
  190. typedef struct ColorSet {
  191.     PaletteHandle paletteHandle;
  192.     int                        **bandMap;
  193.     int                        firstAnimated;
  194.     int                        bandsCovered;
  195.     int                        minDwell;
  196.     int                        anchorSwatch;
  197.     int                        anchorBand;
  198.     int                        anchorModulus;
  199.     RGBColor            MColor;
  200.     int                        MColorIndex;
  201.     RGBColor            borderColor;
  202.     int                        borderColorIndex;
  203.     int                        swatchCount;
  204.     Swatch                swatch[];
  205. } ColorSet, *ColorSetPtr, **ColorSetHandle;
  206.  
  207. typedef struct EditPatch {
  208.     PatchType                    patchType;
  209.     RGBColor                    color[2];
  210. } EditPatch, *EditPatchPtr, **EditPatchHandle;
  211.  
  212. typedef struct EditSwatch {
  213.     int                                patchCount;
  214.     int                                bandsCovered;
  215.     boolean                        modified;
  216.     EditPatch                    patch[3];
  217. } EditSwatch, *EditSwatchPtr, **EditSwatchHandle;
  218.  
  219. /* Save-file section header */
  220.  
  221. typedef struct FileSection {
  222.     long int                    signature;
  223.     int                                type;
  224.     int                                version;
  225.     long int                    byteCount;
  226. } FileSection, *FileSectionPtr, **FileSectionHandle;
  227.  
  228. /* Coordinate save block, Version 2 */
  229.  
  230. typedef struct CoordBlock {
  231.     int                                width;
  232.     int                                height;
  233.     int                                maxDwell;
  234.     short double            top;
  235.     short double            left;
  236.     short double            bottom;
  237.     short double            right;
  238.             /* Version 0 data ends here */
  239.     boolean                        isJulia;
  240.     short double            juliaReal;
  241.     short double            juliaImag;
  242.             /* Version 1 data ends here */
  243.     saneExtended            topExtended;
  244.     saneExtended            leftExtended;
  245.     saneExtended            bottomExtended;
  246.     saneExtended            rightExtended;
  247.     saneExtended            juliaRealExtended;
  248.     saneExtended            juliaImagExtended;
  249. } CoordBlock, CoordBlockPtr, CoordBlockHandle;
  250.  
  251. /* View-control save block, Version 7 */
  252.  
  253. typedef struct ModeBlock {
  254.     boolean                        showPrecalculatedSet;
  255.     DisplayMode                displayMode;
  256.     CalcMode                    calcMode;
  257.     CalcOrder                    calcOrder;
  258.     CalcPhase                    calcPhase;
  259.     short double            rMax;
  260.             /* Version 0 data ends here. */
  261.     int                                dwellsPerBand;
  262.     CLUTmode                    clutMode;
  263.             /* Version 1 data ends here. */
  264.     boolean                        rootScaling;
  265.     saneExtended            rootScaleFactor;
  266.             /* Version 2 data ends here. */
  267.     boolean                        distanceEstimator;
  268.     saneExtended          borderWidth;
  269.             /* Version 3 data ends here. */
  270.     DivConAlgorithm        divConAlgorithm;
  271.             /* Version 4 data ends here. */
  272.     short double            radiusCorrection;
  273.     boolean                        cutDisks;
  274.             /* Version 5 data ends here. */
  275.     boolean                        isBroadband;            
  276.             /* Version 6 data ends here. */
  277.     DivConAlgorithm        divConAlgorithm2;
  278. } ModeBlock, *ModeBlockPtr, **ModeBlockHandle;
  279.  
  280. /*
  281.         ColorSetBlock, version 0.  Swatches are tailed onto the end of this fixed
  282.       structure exactly as they appear in memory.
  283.       
  284.       In the future... when adding stuff to the header, increment the header
  285.       version (currently 0) and add new variables at the end of the header.
  286.       Don't change the ColorBlockSet major version unless the swatch/patch
  287.       format changes in an incompatible way... the version-0 reader will
  288.       ignore ColorSetBlocks with a version > 0.
  289. */
  290.  
  291. typedef struct ColorSetBlock {
  292.     int                        headerSize;
  293.     int                        headerVersion;
  294.     int                        minDwell;
  295.     int                        anchorSwatch;
  296.     RGBColor            MColor;
  297.     RGBColor            borderColor;
  298.     int                        swatchCount;
  299. } ColorSetBlock, *ColorSetBlockPtr, **ColorSetBlockHandle;
  300.  
  301.